//
//  Person.h
//  08-iOS新特性
//
//  Created by dllo on 16/7/13.
//  Copyright © 2016年 daming. All rights reserved.
//

#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
// Nullability 是在编译层次上加了一些改动
// nonnull 声明的属性不能为空 (getter和setter方法)
//@property (nonnull, nonatomic, copy) NSString *name;
// __nonnull 在声明的属性类型后添加__nonnull
@property (nonatomic, copy) NSString *__nonnull name;
// Nullable 声明的属性, 是可以为空
//@property (nullable, nonatomic, copy) NSString *sex;
// __nullable 在声明的属性类型后加__nullable
@property (nonatomic, copy) NSString *__nullable sex;
//null_resettable setter方法是nullable getter方法是nonnull
// 举例, UIViewController中的view属性
@property (null_resettable, nonatomic, strong) NSArray *friends;
@property (nonatomic, strong) NSDictionary *dic;
// NS_ASSUME_NONNULL_BEGIN
// NS_ASSUME_NONNULL_END
// 一般应用于头文件.h, 一般将声明包含起来
// 针对所有属性, 添加 nonnull 修饰
// 也就是说, 处理nullable和null_resttable需要加修饰, 其他都不需要
// 不可以像下面这样做
//@property (nonatomic, nonnull, assign) NSInteger number;

NS_ASSUME_NONNULL_END

@end
